home *** CD-ROM | disk | FTP | other *** search
-
- /-----------------------------\
- | Xine - issue #1 - Phile 016 |
- \-----------------------------/
-
-
- A little introduction to cryptography by b0z0
- ---------------------------------------------
- This is only a little introduction to the simplest method of encryption.
- All the methods described above may not be used to protect your important
- data. This text is only intended to give to the novice a general overview
- of the classic encryption methods, which are also the base of the current
- encryption algorithms. This methods are very simple, but i haven't already
- seen an article talking about them, so i decided to collect a little
- of material and write something about this :)
-
- Substitution cipher
- -------------------
- The substitution cipher basically works in this way:
- First of all let's fix a permutation of our alphabet
-
- A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
- P E Y D X U W B Z T J M Q I R N V O L K G S H A C F
-
- The rule of the substitution cipher is very simple: we must just change
- every character of the plain text with the correspondant permutation
- described by the second line of our example. All "A"s will became "P"s,
- all "B"s will became "E"s, "C"s will became "Y"s and so on.
- So if the phrase that we would to encrypt was for example (spaces are
- ignored!)
-
- BILL GATES SUCKS
-
- the encrypted message would be
-
- EZMM WPKXL LGYJL
-
- The decryption of this message is very simple. We must just use the
- inverse permutation, which is obtained overturning the direct permutation:
-
- P E Y D X U W B Z T J M Q I R N V O L K G S H A C F
- A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
-
- Note that the english alphabet has 26 characters, so the possible
- permutations are 26! (26*25*24*23*22*....*2*1), which is a quite big
- number :)
-
- Transposition cipher
- --------------------
- Also the transposition cipher is based on a permutation, but in this
- cipher there we must select a period P, which is also knows as the period
- of the transposition. The plain text is then divided in pieces which
- lenght is equal to P and each character of this pieces is changed with
- the appropriate permutation that we have created before. So, if the
- selected P was 5 let's select a permutation of integers from 1 to P:
-
- 1 2 3 4 5
- 3 1 5 4 2
-
- Now let's say that our phrase to encrypt (spaces are ignored) is:
-
- YO COME ON AND HACK
-
- And now let's divide the phrase in pieces of five (again, spaces are
- ignored :) ). To divide the parts we will use a "/":
-
- YO COM/E ON AN/D HACK
-
- and now let's mix the letters as we decided before. The result is
-
- CY MOON EN AOA DKCH
-
- Also here to decrypt the we must just use the inverse permutation on the
- P-long parts:
-
- 3 1 5 4 2
- 1 2 3 4 5
-
- Additive cipher
- ---------------
- To work with this type of cipher we must imagine that the alphabet is
- such an interrupted chain, when after the last Z there is again the first
- A and so on. The additive cipher is very simple and is based on a rotation
- of the alphabet. Let's see an example
-
- A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
-
- After a rotation of 4 to right it becomes
-
- W X Y Z A B C D E F G H I J K L M N O P Q R S T U V
-
- Now to encrypt the message we must just change each character with the
- correspondant rotated one. So HELLO THERE will became DAHHK PDANA. As you
- can see the rotations that we can made are from 0 (plain text) to 25, not
- a lot of possibilityes really. An example of the additive cipher is the
- Caezar cipher, which was basically an additive cipher with the fixed
- rotation of 3 to the left. To decrypt a message encrypted with the
- additive cipher we must just know the number of the executed rotations.
-
- Vigenere cipher
- ---------------
- The Vigenere cipher is based on a secret word, let's say VIRUS. Let's
- suppouse that we are going to crypt this phrase:
-
- MICROSUCK REALLY SUCK
- (VIRUSVIRU SVIRUS VIRU)
-
- The second line, where the secret word is repeated, is used for the
- encryption. Using the Vigenere table (look at the Appendix) we will
- encrypt each letter using the right row correspondant to the current
- character of our secret word. So the first M will be encrypted using the
- row V, so the M will became a H, the I using the row I will became a Q,
- the C a T and so on. The encrypted message will be (space are ignored):
-
- HQTLGNCTE JZICFQ NCTE
-
- To decrypt the message we can just look into the Vigenere table in the
- column corresponding the key character and find the character for which
- the result is our encrypted letter.
-
- Grate cipher
- ------------
- This is a very simple method of encryption. The plain text is written in
- two lines, going up and down. So the phrase REALLY COOL PHILES (ignoring
- spaces) is encrypted writing a character in the first row, then one in
- the second, then again one in the first, again one in the second and so
- on. Like this:
-
- R A L C O P I E
- E L Y O L H L S
-
- And the resulting encrypted phrase is RALCOPIEELYOLHLS.
-
- Column transposition cipher
- ---------------------------
- The plain text is written in part of a deteminated lenght, any part in
- a new row, as explained below.
- (The phrase is WELCOME TO THE IKX and the selected period is 3)
-
- W E L
- C O M
- E T O
- T H E
- I K X
-
- And now we must select a permutation between 1 and the selected number
- (in our example 3). Let's say 3 2 1. In the final encrypted output the
- colums are written horizontally in the specified order of the permutation.
- So the third column will be written first, then the second and then the
- first. The result that follows is LMOEX EOTHK WCETI.
-
- Adding key cipher
- -----------------
- In this example we will need a secret key of lenght n. Let's define that
- the first character of the key is named k(0), the second k(1) and the last
- k(n-1). The same will be for the phrase that we want to encrypt. The first
- character will be called p(0), the second p(1) and so on. The encryption
- method is simple:
-
- r(i) = [ p(i) + k(i mod n) ] mod 26
-
- r(i) is the resulting i letter. Of course in this method we assign to
- each letter a number starting with 0. So A will have the value of 0, B of
- 1 and up to Z of 25. And now let's see an example:
-
- SPACES ARE OF COURSE IGNORED
- KINDAK IND AK INDAKI NDAKIND
-
- the first phrase is in plain text, and in the second phrase we put the
- secret word (KINDA) so all the decrypted text will be covered. Now let's
- see how this works. Let's calculate the first letter:
-
- r(0) = [ p(0) + k(0 mod 5) ] mod 26
- r(0) = [ p(0) + k(0) ] mod 26
- r(0) = [ "S" + "K" ] mod 26
- r(0) = [ 18 + 10 ] mod 26
- r(0) = 28 mod 26
- r(0) = 2
- r(0) = "C"
-
- and so on. the second letter will be a X (15 + 8), then a N (0 + 13) and
- so on. The resulting message is
-
- CXNFEC IFH OP KBXRCM VJNYZRG
-
-
-
- Appendix
- --------
-
- Vigenere table
- --------------
-
- A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
- B C D E F G H I J K L M N O P Q R S T U V W X Y Z A
- C D E F G H I J K L M N O P Q R S T U V W X Y Z A B
- D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
- E F G H I J K L M N O P Q R S T U V W X Y Z A B C D
- F G H I J K L M N O P Q R S T U V W X Y Z A B C D E
- G H I J K L M N O P Q R S T U V W X Y Z A B C D E F
- H I J K L M N O P Q R S T U V W X Y Z A B C D E F G
- I J K L M N O P Q R S T U V W X Y Z A B C D E F G H
- J K L M N O P Q R S T U V W X Y Z A B C D E F G H I
- K L M N O P Q R S T U V W X Y Z A B C D E F G H I J
- L M N O P Q R S T U V W X Y Z A B C D E F G H I J K
- M N O P Q R S T U V W X Y Z A B C D E F G H I J K L
- O P Q R S T U V W X Y Z A B C D E F G H I J K L M N
- P Q R S T U V W X Y Z A B C D E F G H I J K L M N O
- Q R S T U V W X Y Z A B C D E F G H I J K L M N O P
- R S T U V W X Y Z A B C D E F G H I J K L M N O P Q
- S T U V W X Y Z A B C D E F G H I J K L M N O P Q R
- T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
- U V W X Y Z A B C D E F G H I J K L M N O P Q R S T
- V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
- W X Y Z A B C D E F G H I J K L M N O P Q R S T U V
- X Y Z A B C D E F G H I J K L M N O P Q R S T U V W
- Y Z A B C D E F G H I J K L M N O P Q R S T U V W X
- Z A B C D E F G H I J K L M N O P Q R S T U V W X Y
-
- C program to encrypt with the Vigenere cipher
- ---------------------------------------------
-
- /*
-
- Compile it with GCC:
- gcc vig.c -o vigenere
- Execute it:
- vigenere < input_file
- Where the first line in the input_file must contain the key (which
- length is minor of MAXKEYLENGTH) and the other lines may contain the plain
- text that you would like to encrypt. Note that this sample program only
- handles lowercase inputs.
-
- */
-
- #include <stdio.h>
-
- #define MAXKEYLENGTH 20 /* maximum length of the key */
- char key[MAXKEYLENGTH+1]; /* encipherment key */
- int keylength = 0; /* length of the used key */
-
- FILE *fp; /* set to stdin if interactive, else file */
-
- void getkeyfromfile(void)
- {
- char *tmp = key; /* pointer to key array */
- for (keylength=0; keylength < MAXKEYLENGTH; keylength++)
- if ((key[keylength]= getc(fp)) == '\n') break;
- }
-
- int encipher(int i) /* key position */
- {
- int tmp; /* for cipher char calculation */
- char currentchar; /* current charachter */
-
- currentchar = getc(fp);
- if (currentchar >= 'a' && currentchar <= 'z')
- {
- tmp = (currentchar + key[i] - 2*'a') % 26;
- while (tmp < 0) tmp += 26;
- tmp += 'a';
- }
- else
- tmp = currentchar; /* if not alphabetic return unchanged */
- return(tmp);
- }
-
- void vigenere(void)
- {
- int current, i=0; /* cipher character */
-
- while (!feof(fp))
- {
- current = encipher(i); /* generate encrypted character */
- if (current < 'a' || current > 'z')
- {
- putchar(' '); /* do a space */
- continue; /* if not an alphabetic lowercase */
- }
-
- if (i == keylength-1) /* end of the key? */
- i=0;
- else
- i++;
- putchar(current);
- }
- putchar('\n');
- }
-
- void main(void)
- {
- fp = stdin;
- getkeyfromfile();
- vigenere();
- }
-
-